package cliente;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Client extends Thread{
	private String mess = null;
	static DataInputStream in;
	DataOutputStream out;
	Socket client;
        private ServerSocket server;
	//private String IPServer = null;	

	Client() {
		super("Client");
		//IPServer = "localhost";
			
		//System.out.println("Here!");
		  // conectarse al servidor, obtener flujos, procesar la conexi?n
	      try {
	    	  toConfigureClient(); // Paso 1: crear un socket para realizar la conexi?n
                  //toProcessConection(); // Paso 2: procesar la conexi?n
	      }

	      // el servidor cerr? la conexi?n
	      catch ( EOFException excepcionEOF ) {
	         System.err.println( "El cliente termino la conexi?n" );
	      }

	      // procesar los problemas que pueden ocurrir al comunicarse con el servidor
	      catch ( IOException excepcionES ) {
	         excepcionES.printStackTrace();
	      }

	      finally {
	        // cerrarConexion(); // Paso 4: cerrar la conexi?n
	      }

	   } // fin del m?todo ejecutarCliente	
	
	
/******************************************************************/
	/**************	CREAR, Y CONFIGURAR SOCKET CLIENTE	**************/

	private void toConfigureClient() throws IOException {		
	    
		mostrarMensaje("Intentando hacer conexion!");
		// crear Socket para realizar la conexi?n con el servidor
	    //client = new Socket( "168.176.26.137" , 12345 );	
            client = new Socket( InetAddress.getByName( Main.IPServer ), 12345 );
		//client = new Socket( InetAddress.getByName( Main.IPServer ), 5000 );		

		out = new DataOutputStream(client.getOutputStream());		
		in = new DataInputStream(client.getInputStream());	
		System.out.println("Conexion realizada!!!");
                
		
				
	} 

	/**************	RECIBIR LOS DATOS ENVIADOS POR EL SERVIDOR	**************/			

	private void toProcessConection() throws IOException// procesar la conexi?n con el servidor

		   {
		      do { // procesar mensajes enviados del servidor
		    	  mess = in.readUTF();
		    	  mostrarMensaje("SERVER>>> "+mess);

		      } while ( !mess.equals( "SERVIDOR>>> TERMINAR" ) );

		   }
    /*****************************************************************************/		
	/**************	ENVIAR DATOS AL SERVIDOR	**************/	

	public void enviarDatos(String dato)
	{
		try {	out.writeUTF(dato);
		
		} catch (Exception e) {
			System.out.println("No se pudo enviar el dato al servidor");
		}
	
	}
        
      /***************************************************************************/
        /****************LEER DATOS ENVIADOS POR EL SERVIDOR       *****************/
      /******************************************************************************/
  public void run()
  {
        do {        
            try {
                
                mess = in.readUTF();
                /*Mostramos el String recibido del Servidor y lo mostramos en el Label
                     "entrada" del JFrame principal gracias a que este es de tipo static */
                Main.entrada.setText(mess);
                //mostrarMensaje(mess);
                //mostrarMensaje("SERVER>>> "+mess);
                //System.out.println("Consola subhilo "+mess);
                
            } catch (IOException ex) {
                Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
            }
         
                     
 		    	  
                  } while ( !mess.equals( "SERVIDOR>>> TERMINAR" ) );        
  }

/***********************************************************************************/
        
	public static void mostrarMensaje(String mess)
	{
		System.out.println(mess);
                Main.entrada.setText(mess);
                //Main.changeLabel(mess);
                
	}





}
